package com.app.util;

public class PhoneValidator {
    // 最新手机号正则（2023年更新版）
    private static final String PHONE_REGEX = "^1([38]\\d|4[579]|5[0-35-9]|6[2567]|7[0-8]|9[0-35-9])\\d{8}$";

    public static boolean isValidPhoneNumber(String phone) {
        if (phone == null || phone.isEmpty()) {
            return false;
        }

        // 去除所有空白字符
        String cleaned = phone.replaceAll("\\s+", "");

        return cleaned.matches(PHONE_REGEX);
    }

    // 测试用例
    public static void main(String[] args) {
        System.out.println("有效号码：");
        System.out.println(isValidPhoneNumber("13812345678"));   // true 移动
        System.out.println(isValidPhoneNumber("19912345678"));   // true 电信
        System.out.println(isValidPhoneNumber("16612345678"));   // true 联通
        System.out.println(isValidPhoneNumber("17612345678"));   // true 虚拟运营商

        System.out.println("\n无效号码：");
        System.out.println(isValidPhoneNumber("12345678901"));   // false 错误开头
        System.out.println(isValidPhoneNumber("1312345678"));    // false 长度不足
        System.out.println(isValidPhoneNumber("186123456789"));  // false 长度过长
        System.out.println(isValidPhoneNumber("123a5678901"));   // false 包含字母
        System.out.println(isValidPhoneNumber("14123456789"));   // false 不支持号段


        System.err.println("\n测试");
        System.err.println(isValidPhoneNumber("18219979760"));
    }
}
